package hichecker.ui.components.custom_table.table_cell_renderer;

import hichecker.ui.components.custom_table.AbstractCustomTableModel;
import info.clearthought.layout.TableLayout;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableCellRenderer;

public class BooleanTableCellRenderer extends DefaultTableCellRenderer {
	/* CONSTRUCTOR ***************************************************************************** */
	/**
	 * Zeichnet den Text in der Zelle und färbt die gesamte Zeile abhängig davon, ob es in der Zeile
	 * einen Wert gibt, der geändert wurde und ob die Zeile markiert ist oder nicht.
	 */
	@Override
	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
			boolean hasFocus, int row, int column) {
		super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

		// wurde aktuelle Zeile geändert?
		AbstractCustomTableModel<?> tableModel = (AbstractCustomTableModel<?>) table.getModel();
		boolean hasChanged = tableModel.cellsHaveChanged(table.convertRowIndexToModel(row), TableModelEvent.ALL_COLUMNS);

		// Hintergrundfarbe ermitteln
		// TODO: add change coloring
		hasChanged = false;
		Color bg = isSelected ? hasChanged ? new Color(124, 170, 207) : table
				.getSelectionBackground() : hasChanged ? new Color(253, 237, 162) : getBackground();

		// Checkbox erstellen
		JCheckBox checkBox = new JCheckBox();
		checkBox.setSelected(value == null || value.equals("") ? false : (Boolean) value);

		// Checkbox in Panel zentrieren
		JPanel panel = new JPanel(new TableLayout(new double[][] {
				{ TableLayout.FILL, checkBox.getPreferredSize().getWidth(), TableLayout.FILL },
				{ TableLayout.FILL } }));
		panel.add(checkBox, "1,0");
		panel.setBackground(new Color(bg.getRed(), bg.getGreen(), bg.getBlue()));

		// Panel zurückgeben
		return panel;
	}
}
